package DAOS.sistema;

import ConectividadDatos.CargadorDatos;
import ConectividadDatos.EnlaceDB;
import DTOS.sistema.ConfiguracionDTO;
import DTOS.sistema.ModuloMenuDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author AlanGR
 */
public class SistemaDAO {

    private EnlaceDB enlace;
    private CargadorDatos cargador;

    public SistemaDAO() {
        enlace = new EnlaceDB();
        cargador = new CargadorDatos();
    }

    /**
     * ALAN GONZALEZ
     *
     * @return
     */
    public ConfiguracionDTO configuracionSistema() {
        ConfiguracionDTO configuracion = new ConfiguracionDTO();

        return configuracion;
    }

    public Vector estructuraMenuUsuario(int usuarioSistemaID) {

        Vector estructuraMenuUsuario = new Vector();
        enlace.openDatabase();
        // QUERY PARA OBTENER LA LISTA DE GRUPOS DE MODULOS
        String sqlGruposSubmodulos = "SELECT DISTINCT `modulos_usuario`.`modulo_sistema_grupo` AS grupo FROM `modulos_usuario` WHERE `modulos_usuario`.`usuario_id` = " + usuarioSistemaID;

        Vector listaGrupos = new Vector();
        ResultSet rst = enlace.executeQuery(sqlGruposSubmodulos);
        try {
            while (rst.next()) {
                int grupo = rst.getInt("grupo");
                listaGrupos.add(grupo);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex);

        }
        enlace.closeDatabase();
        // SE RECORRE LA LISTA DE SUBMODULOS PARA ENCONTRAT EL ID DEL MODULO DEL GRUPO < PRINCIPAL >
        for (int x = 0; x < listaGrupos.size();) {
            enlace.openDatabase();
            int grupo = (Integer) listaGrupos.elementAt(x);
            Vector vModulos = new Vector();
            String sqlModuloCabecera = "SELECT * FROM `modulos_sistema` WHERE `modulos_sistema`.`grupo` =" + grupo + " AND modulos_sistema.tipo = 1 LIMIT 1 ;";
            ResultSet rst2 = enlace.executeQuery(sqlModuloCabecera);
            try {
                if(rst2.next()) {
                    ModuloMenuDTO menuDTO = new ModuloMenuDTO();
                    menuDTO.setTitulo(rst2.getString("titulo").toUpperCase());                              // TITULO PRINCIPAL DEL MODULO REGISTROS TIPO 1
                    menuDTO.setUrl(rst2.getString("url"));                                                  // URL PRINCIPAL DEL MODULO
                    menuDTO.setSubModulos(this.submodulos(usuarioSistemaID, grupo));                        // CARGA DE VECTOR DE SUBMODULOS REGISTROS TIPO 2
                    System.out.println("tamaño vector submodulos" + menuDTO.getSubModulos().size());
                    estructuraMenuUsuario.add(menuDTO);                                                     // CARGA AL VECTOR
                }else{
                    System.out.println("ERROR AL CARGAR SU CABECERA Y SUS COMPONENTES");
                }
            } catch (SQLException ex1) {
                Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex1);
            }
            enlace.closeDatabase();
            x++;
            
        }

        return estructuraMenuUsuario;
    }

    /**
     * SUBMODULOS CARGADOS AL USUARIO
     *
     * @param usuarioID
     * @param grupo
     * @return
     */
    public Vector submodulos(int usuarioID, int grupo) {
        Vector submodulosID = new Vector();
        Vector modulos = new Vector();
        String sqlTipoSubmodulos = "SELECT * FROM `modulos_usuario` WHERE `modulos_usuario`.`modulo_sistema_grupo` =" + grupo + " AND `modulos_usuario`.`usuario_id` =" + usuarioID;
        enlace.openDatabase();
        ResultSet rst = enlace.executeQuery(sqlTipoSubmodulos);
        try {
            while (rst.next()) {
                int subId = rst.getInt("modulo_sistema_id");
                submodulosID.add(subId);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        for (int x = 0; x < submodulosID.size();) {
            int id = (Integer) submodulosID.elementAt(x);

            String sql = "SELECT * FROM `modulos_sistema` WHERE `modulos_sistema`.id =" + id;
            ResultSet subModulos = enlace.executeQuery(sql);
            try {
                if (subModulos.next()) {
                    ModuloMenuDTO mod = cargador.moduloMenuDTO(subModulos);
                    modulos.add(mod);
                }
            } catch (SQLException ex) {
                Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            x++;
        }
        enlace.closeDatabase();

        return modulos;
    }

    /**
     * ALAN GONZALEZ MODULOS DEL SISTEMA
     *
     * @return
     */
    public Vector modulosSistema() {
        Vector vModulos = new Vector();
        String query = "SELECT * FROM `modulos_sistema`  ORDER BY grupo ASC, tipo DESC ";
        enlace.openDatabase();
        ResultSet rst = enlace.executeQuery(query);
        try {
            while (rst.next()) {
                ModuloMenuDTO menuDTO = cargador.moduloMenuDTO(rst);
                vModulos.add(menuDTO);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            rst.close();
        } catch (SQLException ex) {
            Logger.getLogger(SistemaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        enlace.closeDatabase();
        return vModulos;
    }
}
